/**
    Copyright (C) 2012 Guido Ludwig

    This file is part of JATT.
	http://code.google.com/p/jatt/

    JATT is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
package de.guidoludwig.jatt.chain.commands.config;

import com.jgoodies.binding.beans.Model;

/**
 * @author Guido Ludwig
 */
public abstract class JATTCommandConfigBase extends Model implements
		JATTCommandConfig {

	private static final long serialVersionUID = 591520017948593518L;

	public static final String PROPERTY_DEACTIVATEABLE = "deactivateable";

	public static final String PROPERTY_ACTIVE = "active";

	private boolean active;
	private final boolean deactivateable;

	protected JATTCommandConfigBase() {
		this(true);
	}

	/**
	 * by default, commands are not active, except those which are not
	 * deactivateble
	 *
	 * @param deactivateable
	 */
	protected JATTCommandConfigBase(boolean deactivateable) {
		active = !deactivateable;
		this.deactivateable = deactivateable;
	}

	@Override
	public boolean isActive() {
		return active;
	}

	public void setActive(boolean newActive) {
		if (!deactivateable && !newActive) {
			throw new IllegalArgumentException("Command is not deactivateable");
		}
		boolean oldActive = isActive();
		active = newActive;
		firePropertyChange(PROPERTY_ACTIVE, oldActive, active);
	}

	public boolean isDeactivateable() {
		return deactivateable;
	}

}
